// 引入cookie操作方式
import { getToken, setToken, removeToken } from '@/utils/auth'
// 引入user.js中的login方法
import { getUserInfo, login, getUserDetailById } from '@/api/user'
// 引入路由
// import router from '@/router'
// 引入全局弹框组件
// import { Message } from 'element-ui'
const state = {
  // 页面刷新加载的数据
  token: getToken(),
  // ①设置用户基本信息变量, 初始值必须是对象, 因为组件中需要userInfo.username  userInfo是异步获取的,防止报错
  userInfo: {}
}

const mutations = {
  // 定义一个修改token的方法
  SET_TOKEN(state, token) {
    // vuex的token存储
    state.token = token
    // cookie存储token
    setToken(token)
  },

  // 定义一个删除token的方法
  REMOVE_TOKEN(state) {
    // vuex的token移除
    state.token = null
    // cookie移除token
    removeToken()
  },

  // 定义一个修改userInfo的方法
  SET_USERINFO(state, payLoad) {
    state.userInfo = payLoad
  },
  // 定义一个删除userInfo的方法
  REMOVE_USERINFO(state) {
    state.userInfo = {}
  }

  // // 定义一个合并userInfo的方法
  // HE_BING(state, payLoad) {
  //   state.userInfo = { ...state.userInfo, ...payLoad }
  // }
}

const actions = {
  // 定义一个发送登录请求的方法, 将来要在login.vue组件中调用
  async login({ commit }, payload) {
    // 发送axios请求, 调用user.js接口里面的函数
    const res = await login(payload)
    // 成功就调用SET_TOKEN方法
    commit('SET_TOKEN', res)
    // 跳转页面??? 可以写
    // router.push({
    //   path: '/'
    // })
    // router.push('/') 纯跳转
  },
  // 定义一个发送获取用户信息的方法
  async getUserInfo({ commit }) {
    const data = await getUserInfo()
    // 发获取员工信息请求
    const res = await getUserDetailById(data.userId)
    // 触发mutation
    commit('SET_USERINFO', { ...data, ...res })
    // return data
  },
  // 定义一个退出登录的方法
  logout({ commit }) {
    // 触发删除token方法
    commit('REMOVE_TOKEN')
    // 触发删除userInfo方法
    commit('REMOVE_USERINFO')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

